//node 1_扁平化数组_去重_排序.js

// Array.isArray() 判断是否是数组
// map() 迭代方法，对数组每一项都运行传入的函数，返回每一项运行结果所组成的数组
// some() 迭代方法，对数组每一项都运行传入的函数，如果有一项返回true，则这个方法返回true
// concat() 数组拼接，能够打平2层数组（2层以上无效）
// sort() 数组排序 (a,b)=>a-b 正序  （a,b）=>b-a 倒序
// splice() 数组的元素 添加-删除-替换-返回数组片段


//需求：扁平化->去重->排序

var arr = [
    [1,2,2],
    [4,5,5],
    [6,7,8,7,9],
    [11,12,[12,12,[13]]],
    10,
    3
];

//扁平化处理的方法
Array.prototype.flat = function () {
    //方法一：
    // const result = this.map(item => {
    //     if(Array.isArray(item)){
    //         return item.flat()
    //     }else{
    //         return [item]
    //     }
    // })
    // return [].concat(...result)
    //方法二:
    let arr = this
    while(arr.some(item => Array.isArray(item))){
        arr = [].concat(...arr)
    }
    return arr
}

//去重处理的方法
Array.prototype.unique = function () {
    return [...new Set(this)]
}

//排序处理的方法
function softFn(a,b) {
    return a - b
}

console.log(arr.flat().unique().sort(softFn));
